1.1 Dart 命令——Dart SDK 的入口
拿到庞大的 Dart SDK 后,第一感觉是很迷茫,不知道该如何下手。对于 Dart SDK,开发者实际使用时,都是与 dart 命令打交道。dart 命令就是整个 Dart SDK 的入口。我们的 Dart SDK 之旅,也是从 dart 命令展开。
dart 命令初体验
dart
命令是进行 Dart 开发时最长使用到的命令,日常的运行、编译、依赖管理,均通过 dart
命令完成。
dart
命令的功能介绍如下:
[maxiee@archlinux sdk]$ dart
A command-line utility for Dart development.
Usage: dart <command|dart-file> [arguments]
Global options:
-v, --verbose Show additional command output.
--version Print the Dart SDK version.
--enable-analytics Enable analytics.
--disable-analytics Disable analytics.
--suppress-analytics Disallow analytics for this `dart *` run without changing the analytics configuration.
-h, --help Print this usage information.
Available commands:
analyze Analyze Dart code in a directory.
compile Compile Dart to various formats.
create Create a new Dart project.
devtools Open DevTools (optionally connecting to an existing application).
doc Generate API documentation for Dart projects.
fix Apply automated fixes to Dart source code.
format Idiomatically format Dart source code.
info Show diagnostic information about the installed tooling.
pub Work with packages.
run Run a Dart program.
test Run tests for a project.
Run "dart help <command>" for more information about a command.
See https://dart.dev/tools/dart-tool for detailed documentation.
Dart 命令的组成架构
Dart 命令由多部分组成,即包括 C/C++ 实现的 Runtime,也包括 Dart 实现的 CLI 交互命令,还包括一系列的外部 Snapshot。在调用 dart 命令时,三者有机地相结合。整体如下图所示:
源码目录
最初时,我以为 dart 命令时纯 Dart 实现的(在 Dart SDK 中被称为 dartdev
,位于 pkg/dartdev
目录下),后来发现这只是一部分。
原来,在 runtime/bin/main.cc
下还有一个 C++ 的入口,这才是 dart 命令的真正入口。
在执行 dart 命令时,首先执行 C++ 的 dart 命令,在命令内启动 DartVM,之后再创建 DartDevIsolate,这个 isolate 会加载预编译的 dartdev
的 snapshot。
DartDevIsolate 就是本文开头的命令行处理部分,涉及到编译运行工作时,再交回给 C++ 部分。
以编译命令为例,DartDevIsolate 解析 dart compile 的命令行参数后,会以新进程方式再次调用 dart 命令,在 C++ 的实现中,执行具体的编译工作。
本文作者:Maeiee
本文链接:1.1 Dart 命令——Dart SDK 的入口
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!